package cn.me.alphamq.common.util;

import java.util.Map;

/**
 * 服务实例的 attr 的工具类，用于避免直接使用 map.put() 和 map.get()
 *
 * @author f
 */
public class AttrUtil {

    /**
     * attrs 中 broker 角色的 key
     */
    private static final String ROLE_NAME = "role";

    /**
     * attrs 中 broker 组名的 key
     */
    private static final String GROUP_NAME = "group";

    /**
     * attrs 中 broker 版本号的 key
     */
    private static final String VERSION_NAME = "version";

    /**
     * 从 attrs 中获取 broker 的角色
     *
     * @param attrs 服务实例的 attrs 字段
     * @return 当服务实例为 broker 时，返回服务实例 attrs 中存储的角色；否则返回 ""
     */
    public static String getRoleFromAttrs(Map<String, Object> attrs) {
        return attrs.getOrDefault(ROLE_NAME, "").toString();
    }

    /**
     * 将 broker 的角色放到 attrs 中
     *
     * @param attrs 服务实例的 attrs 字段
     * @param role  broker 的角色
     */
    public static void putRoleToAttrs(Map<String, Object> attrs, String role) {
        attrs.put(ROLE_NAME, role);
    }

    /**
     * 从 attrs 中获取 broker 的组名
     *
     * @param attrs 服务实例的 attrs 字段
     * @return 当服务实例为 broker 时，返回服务实例 attrs 中存储的组名；否则返回 ""
     */
    public static String getGroupFromAttrs(Map<String, Object> attrs) {
        return attrs.getOrDefault(GROUP_NAME, "").toString();
    }

    /**
     * 将 broker 的组名放到 attrs 中
     *
     * @param attrs 服务实例的 attrs 字段
     * @param group broker 的组名
     */
    public static void putGroupToAttrs(Map<String, Object> attrs, String group) {
        attrs.put(GROUP_NAME, group);
    }

    /**
     * 从 attrs 中获取 broker 的版本号
     *
     * @param attrs 服务实例的 attrs 字段
     * @return 当服务实例为 broker 时，返回服务实例 attrs 中存储的版本号；否则返回 0
     */
    public static long getVersionFromAttrs(Map<String, Object> attrs) {
        return (long) attrs.getOrDefault(VERSION_NAME, 0);
    }

    /**
     * 将 broker 的版本号放到 attrs 中
     *
     * @param attrs   服务实例的 attrs 字段
     * @param version broker 的版本号
     */
    public static void putVersionToAttrs(Map<String, Object> attrs, long version) {
        attrs.put(VERSION_NAME, version);
    }
}
